/**
 * 📸 图片处理工具类
 * 统一处理图片URL的HTTP转HTTPS、错误处理等
 */

/**
 * 🔥 将HTTP图片URL转换为HTTPS（真机环境要求）
 * @param {string} url - 图片URL
 * @param {string} defaultUrl - 默认图片URL（可选）
 * @returns {string} 转换后的HTTPS URL
 */
function toHttps(url, defaultUrl = '/images/avatar.png') {
  // 如果URL为空或undefined，返回默认图片
  if (!url) {
    return defaultUrl;
  }
  
  // 如果是本地路径（以/开头），直接返回
  if (url.startsWith('/')) {
    return url;
  }
  
  // 如果是data:开头的base64图片，直接返回
  if (url.startsWith('data:')) {
    return url;
  }
  
  // 🔥 检测无效的URL格式（如 http://tmp/ 或 http://usr/ 等微信小程序临时路径）
  if (url.includes('://tmp/') || url.includes('://usr/') || url.includes('://store/')) {
    console.warn('⚠️ 检测到无效的图片URL:', url);
    return defaultUrl;
  }
  
  // 🔥 检测URL是否包含有效的域名（必须包含至少一个点）
  const urlPattern = /^https?:\/\/[^/]+\.[^/]+/;
  if (!urlPattern.test(url)) {
    console.warn('⚠️ 检测到无效的图片URL（缺少域名）:', url);
    return defaultUrl;
  }
  
  // 将HTTP替换为HTTPS
  return url.replace('http://', 'https://');
}

/**
 * 🔥 批量转换图片URL数组为HTTPS
 * @param {Array<string>} urls - 图片URL数组
 * @param {string} defaultUrl - 默认图片URL（可选）
 * @returns {Array<string>} 转换后的HTTPS URL数组
 */
function toHttpsArray(urls, defaultUrl = '/images/avatar.png') {
  if (!Array.isArray(urls)) {
    return [defaultUrl];
  }
  
  if (urls.length === 0) {
    return [defaultUrl];
  }
  
  return urls.map(url => toHttps(url, defaultUrl));
}

/**
 * 🔥 处理用户头像URL
 * @param {string} avatarUrl - 头像URL
 * @returns {string} 处理后的HTTPS头像URL
 */
function processAvatar(avatarUrl) {
  return toHttps(avatarUrl, '/images/avatar.png');
}

/**
 * 🔥 处理活动图片URL数组
 * @param {Array<string>} images - 活动图片数组
 * @returns {Array<string>} 处理后的HTTPS图片数组
 */
function processActivityImages(images) {
  const defaultImage = 'https://via.placeholder.com/300x200/4CAF50/FFFFFF?text=Activity';
  return toHttpsArray(images, defaultImage);
}

/**
 * 🔥 处理用户相册图片URL数组
 * @param {Array<string>} photos - 相册图片数组
 * @param {string} fallbackAvatar - 回退头像URL（可选）
 * @returns {Array<string>} 处理后的HTTPS图片数组
 */
function processUserPhotos(photos, fallbackAvatar = '/images/avatar.png') {
  if (!Array.isArray(photos) || photos.length === 0) {
    return [toHttps(fallbackAvatar)];
  }
  
  return photos.map(photo => toHttps(photo, fallbackAvatar));
}

/**
 * 🔥 获取灰色占位图（用于图片加载失败）
 * 1x1像素的灰色PNG图片，Base64编码，微信小程序兼容
 * @returns {string} Base64编码的占位图
 */
function getPlaceholderImage() {
  return '';
}

/**
 * 🔥 处理图片加载错误（可在WXML中使用）
 * @param {Object} e - 事件对象
 * @param {Object} that - 页面实例
 * @param {string} dataPath - 数据路径（如：'activities[0].images[0]'）
 */
function handleImageError(e, that, dataPath) {
  console.warn('⚠️ 图片加载失败:', dataPath);
  
  if (dataPath && that) {
    that.setData({
      [dataPath]: getPlaceholderImage()
    });
  }
}

module.exports = {
  toHttps,
  toHttpsArray,
  processAvatar,
  processActivityImages,
  processUserPhotos,
  getPlaceholderImage,
  handleImageError
};

